<?php
//  +----------------------------------------------------------------------
//  | Copyright (c) 2015-2025 http://www.hdphp.cn All rights reserved.
//  | Licensed ( http://www.hdphp.cn/licenses/ )
//  | Author: Jack <sophia2152@qq.com>
//  | 官方网址: http://www.hdphp.cn
//  | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//  | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//  +----------------------------------------------------------------------
namespace app\controller\admin\v1\system\config;

use app\common\services\system\config\SystemStorageServices;
use app\controller\admin\AuthController;
use app\common\services\system\config\SystemConfigServices;
use hdphp\services\UploadService;
use think\facade\App;

/**
 * Class：云储存配置控制器
 * 创建人：Jack
 * 创建时间：2024/1/29 17:06
 * @package app\controller\admin\v1\system\config
 */
class SystemStorage extends AuthController
{
    /**
     * 构造函数
     * @param App                   $app
     * @param SystemStorageServices $services
     */
    public function __construct(App $app, SystemStorageServices $services)
    {
        parent::__construct($app);
        $this->services = $services;
    }

    /**
     * 注释：云配置列表
     * 创建人：Jack
     * 创建时间：2024/1/29 17:09
     * @return mixed
     */
    public function index()
    {
        $where = $this->request->getMore([
            ['type', 0]
        ]);
        return $this->success($this->services->getList($where));
    }

    /**
     * 注释：获取配置类型
     * 创建人：Jack
     * 创建时间：2024/1/29 17:18
     * @return mixed
     */
    public function getConfig()
    {
        return $this->success(['type' => (int)sys_config('upload_type', 1)]);
    }

    /**
     * 注释：同步配置列表
     * 创建人：Jack
     * 创建时间：2024/1/29 17:36
     * @param $type
     * @return mixed
     */
    public function syncs($type)
    {
        try {
            $this->services->synchronization((int)$type);
            return $this->success('同步成功!');
        } catch (\Throwable $e) {
            return $this->fail('同步失败,失败原因:' . $e->getMessage());
        }
    }


    public function add($type)
    {

    }


    public function edit()
    {

    }


    /**
     * 注释：修改云存储状态
     * 创建人：Jack
     * 创建时间：2023/12/2 9:25
     * @param $id
     * @return mixed
     */
    public function status($id)
    {
        if (!$id) {
            return $this->fail('缺少参数!');
        }
        $info = $this->services->get($id);
        $info->status = 1;
        if (!$info->domain) {
            return $this->fail('请先设置空间域名!');
        }
        // 设置跨域规则
        try {
            $upload = UploadService::init($info->type);
            $upload->setBucketCors($info->name, $info->region);
        } catch (\Throwable $e) {
        }
        // 修改状态
        $this->services->transaction(function () use ($id, $info) {
            $this->services->update(['type' => $info->type, 'status' => 1, 'is_delete' => 0], ['status' => 0]);
            $info->save();
        });
        return $this->success('修改成功!');
    }


    public function delete()
    {

    }

    /**
     * 注释：切换存储类型
     * 创建人：Jack
     * 创建时间：2024/1/29 17:32
     * @param SystemConfigServices $services
     * @param                      $type
     * @return \think\Response
     */
    public function uploadType(SystemConfigServices $services, $type)
    {
        $status = $this->services->count(['type' => $type, 'status' => 1]);
        if (!$status && $type != 1) {
            return app('json')->fail('未有正在使用的存储空间!');
        }
        $services->update('upload_type', ['value' => json_encode($type)], 'menu_name');
        \hdphp\services\SystemConfigService::clear();
        return app('json')->success('切换成功!');
    }
}